package com.ruoyi.quality.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.ruoyi.baseData.domain.Procedures;
import com.ruoyi.baseData.domain.Process;
import com.ruoyi.baseData.domain.ProcessRel;
import com.ruoyi.baseData.domain.vo.ProcessRelVo;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.core.utils.sql.QueryHelp;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.quality.domain.*;
import com.ruoyi.quality.domain.InspectionTemplateItem;
import com.ruoyi.quality.domain.dto.InspectionTemplateItemDto;
import com.ruoyi.quality.domain.vo.InspectionTemplateItemVo;
import com.ruoyi.quality.domain.vo.InspectionTemplateItemVo;
import com.ruoyi.quality.mapper.InspectionItemMapper;
import com.ruoyi.quality.mapper.InspectionTemplateItemMapper;
import com.ruoyi.quality.service.InspectionTemplateItemService;
import com.ruoyi.quality.mapper.InspectionTemplateItemMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.util.Date;
import java.util.List;

/**
 *
 */
@Service
public class InspectionTemplateItemServiceImpl implements InspectionTemplateItemService{

    @Resource
    InspectionTemplateItemMapper inspectionTemplateItemMapper;
    @Resource
    InspectionItemMapper inspectionItemMapper;

    @Override
    public Page<InspectionTemplateItemVo> getInspectionTemplateItemByPage(InspectionTemplateItemDto pageEntity) {
        MPJLambdaWrapper<InspectionTemplateItem> wrapper = new MPJLambdaWrapper<InspectionTemplateItem>()
                .selectAll(InspectionTemplateItem.class)//查询user表全部字段
                .selectAs( InspectionTemplate::getName, InspectionTemplateItemVo::getTemplateName )
                .selectAs(InspectionItem::getName, InspectionTemplateItemVo::getItemName)
                .selectAs(InspectionItem::getFillType,InspectionTemplateItemVo::getFillType)
                //记的测试阶段
                .eq(InspectionTemplateItem::getDelFlag, 0)
                .eq(null != pageEntity.getInspectionTemplateId(), InspectionTemplateItem::getInspectionTemplateId,pageEntity.getInspectionTemplateId())
                .leftJoin(InspectionTemplate.class, InspectionTemplate::getId, InspectionTemplateItem::getInspectionTemplateId)
                .leftJoin(InspectionItem.class, InspectionItem::getId, InspectionTemplateItem::getInspectionItemId)
                .orderByDesc(InspectionTemplateItem::getCreateTime);
        wrapper = QueryHelp.getPredicateEx(wrapper, InspectionTemplateItem.class, pageEntity);
        Page<InspectionTemplateItemVo> userList = inspectionTemplateItemMapper.selectJoinPage(new Page<>(pageEntity.getCurrentPage(), pageEntity.getPageSize()),   InspectionTemplateItemVo.class, wrapper);
        return userList;
    }

    /**
     *
     * @param testDto
     * @throws ParseException
     */
    @Override
    public void addInspectionTemplateItem(InspectionTemplateItemDto testDto) throws ParseException {
        if(null == testDto.getInspectionItemIds() || testDto.getInspectionItemIds().size() <= 0) {
            throw new GlobalException("请选择质检项目");
        }
        String userName = SecurityUtils.getUsername();
        MPJLambdaWrapper<InspectionItem> wrapper = new MPJLambdaWrapper<InspectionItem>()
                .in(InspectionItem::getId, testDto.getInspectionItemIds())
//                .eq(InspectionTemplateItem::getTagCode, testDto.getTagCode())
                .ne(InspectionTemplateItem::getDelFlag, 1);
//        InspectionItem material = inspectionTemplateItemMapper.selectOne(wrapper);
        List<InspectionItem> inspectionItems = inspectionItemMapper.selectList(wrapper);

        for(int i = 0; i < inspectionItems.size(); i++) {
            InspectionTemplateItem test2 = new InspectionTemplateItem();
            BeanUtils.copyProperties(testDto, test2, new String[]{"id"});
            test2.setInspectionTemplateId(testDto.getInspectionTemplateId());
            test2.setInspectionItemId(inspectionItems.get(i).getId());
            test2.setSequence(i + 1);
            test2.setDelFlag(false);
            test2.setCreateBy(userName);
            test2.setCreateTime(new Date());
            inspectionTemplateItemMapper.insert(test2);
        }
//        for(InspectionItem inspectionItem : inspectionItems) {
//            InspectionTemplateItem test2 = new InspectionTemplateItem();
//            BeanUtils.copyProperties(testDto, test2);
//            test2.setInspectionTemplateId(testDto.getInspectionTemplateId());
//            test2.setInspectionItemId(inspectionItem.getId());
//
//            test2.setDelFlag(false);
//            test2.setCreateBy(userName);
//            test2.setCreateTime(new Date());
//            inspectionTemplateItemMapper.insert(test2);
//        }
    }

    @Override
    public void updateInspectionTemplateItem(InspectionTemplateItemDto testDto) {
        String userName = SecurityUtils.getUsername();
        MPJLambdaWrapper<InspectionTemplateItem> wrapper = new MPJLambdaWrapper<InspectionTemplateItem>()
                ;
        InspectionTemplateItem inspectionTemplateItem = inspectionTemplateItemMapper.selectOne(wrapper);
        if(null == inspectionTemplateItem) {
            throw new GlobalException("该InspectionTemplateItem不存在");
        }
        BeanUtils.copyProperties(testDto, inspectionTemplateItem);
        inspectionTemplateItem.setUpdateBy(userName);
        inspectionTemplateItem.setUpdateTime(new Date());
        inspectionTemplateItemMapper.updateById(inspectionTemplateItem);
    }

    @Override
    public void delInspectionTemplateItem(InspectionTemplateItemDto testDto) {
        InspectionTemplateItem material = inspectionTemplateItemMapper.selectById(testDto.getId());
        if(null == material) {
            throw new GlobalException("该InspectionTemplateItem不存在");
        }
        material.setDelFlag(true);
        inspectionTemplateItemMapper.updateById(material);
    }

    @Override
    public void saveInspectionTemplateItem(List<InspectionTemplateItemDto> testDto) {
        for(int i =0 ; i<testDto.size(); i++) {
            InspectionTemplateItem material = inspectionTemplateItemMapper.selectById(testDto.get(i).getId());
            material.setSequence(i + 1);
            inspectionTemplateItemMapper.updateById(material);
        }
    }
}




